#!/bin/bash
Linux常见的命令大全 
http://man.linuxde.net/
http://cn.linux.vbird.org/linux_basic/linux_basic.php#part1


============================================================================================
第1讲 Linux应用与发展
============================================================================================
第2讲 Linux系统安装
============================================================================================
	安装Linux软件包的选择
		安装类型
		Desktop
		Minimal Desktop
		Minimal
		Basic Server
		Database Server
		Web Server
		Virtual Host
		Softwork development workstation

	Linux的分区(把大的硬盘改成小的区域)
	磁盘分区
		分区类型
	格式化
	硬件设备与文件名
	挂载
		必须分区
			/(根分区)
			Swap(内存的2倍，一般超过2GB)
		推荐分区（一般要自定义）
			/boot(启动分区)
		Linux的文件系统结构及其单独分区(非必要)
			/(最后分区，自定义)
				/boot(一般200M)
				/etc
					/passwd
					/shadow
					/group
				/home(文件服务器需要分大点)
		分区-起名-挂载
	
	终端问题
		ctrl+alt+F1-F6
		
============================================================================================
第3讲 Linux常用命令
============================================================================================
	文件处理	
		ls list
			/bin/ls
			-a所有
			-l详细
			-d目录
		cd change directory
			cd /
			cd ..
		pwd print working directory
			/bin/pwd
			/etc/rc5.d
		touch
			/bin/touch
			touch newfile
		mkdir make directories
			/bin/mkdir
			mkdir newfile
		cp copy
			/bin/cp
			cp -R 源 终
				-R 目录
			cp file1 file2 dir1
			cp -R dir1 dir2
		mv move rename
			/bin/mv
			mv 源fd 终fd
		rm remove
			/bin/rm
			-r 目录
		cat concatenate
			cat /etc/issue | grep 
		more
			space/f 下一页
			enter 下一行
			q/Q 退出
		head tail 
			head -num显示前num行
			head -20 /etc/services
			tail -30 /etc/services
		ln link
			ln -s sf tf创建软链接
			ln sf tf创建软链接
	权限管理
		普通权限
			chgrp chown chmod
				chmod ugo +-= rwx fd
				chmod 421 fd
				chmod 777 fd
				chmod u+rwx,g+rwx f
				d目录
				-文件
				l链接
				b接口设备
				c串口设备
				chgrp adm /root/fd
			umask -S 默认文件权限
				u=rwx,g=rwx,o=rx
				修改默认的文件权限，创建文件，在修改默认权限
				umask 777-002
				touch file
				umask 0002
		隐藏权限
			chattr
				chattr +-= ASacdistu
				lsattr -adR fd
				i 针对文件和目录作用不同
					文件：不能操作，加锁，只能读取查看
					目录：不能修改数据，只能查看，不能新建等
				a
					文件：只能追加echo >>
					目录：可以新建，不能删除
			lsattr
				查看影藏属性
		特殊权限
			特殊权限显示
			ls -al /etc/passwd
			ls -al /usr/bin/passwd
			SetUID
				只能针对二进制x
				执行者有执行权限
				有了SUID权限后，其他人执行这个文件时，临时变成了文件所有者的身份
				只有在执行的过程中才能编程所有者的身份
				ls -al /usr/bin/passwd
					在所有者x变成了s
				不能执行的文件设置了SUID不起作用
				设置SUID
					chmod 4755 fd
					chmod u+s fd
				取消
					chmod 755 fd
					chmod u-s fd
				用法
					普通用户u创建文件
					普通用户加执行权限x  
					root下u+s设置SUID权限
					普通用户u下使用SUID
					执行时临时编程SUID权限
			SetGID
				U 4
				G 2
				B 1
				SGID权限可以对目录加权限
				分配和取消
				针对文件和目录的用户组有效
			SBID
				只能针对目录有效
				ll -d /tmp
				可以防止公共目录（SBID）下其他用户删除另外用户的文件
				只能在root下对其他的文件夹赋予SBID权限
				chmod 1775 fd
				chmod 775 fd
				chmod o+-t fd
	命令与文件搜索
		命令查找
			which cmd
				which ls
				which which
				which ifconfig
				基于环境变量来搜索的
				echo $PATH
		探测文件的类型
			file
		文件查找
			通常使用whereis 和 locate
				whereis vim
					命令路径，源代码，man手册帮助位置
				locate
					locate file
				grep str file
					grep ftp /etc/services
			find的效率很低
				find path key
					普通用法
						find /etc/ -name rc
						find /etc/ -name *pass*
						find /etc/ -iname p???
						find / -size +204800 单位是数据块（512k）
						find / -user root
						find / -user c
						find /etc -cmin -5 查看5分钟内被修改的文件
							-amin 访问时间
							-cmin 修改文件属性时间
							-mmin 更改内容时间
						find /etc -type fdl
					多重查找
						find /etc -size +163840 -a -size -204800
							-a 且
							-o 或
					高级用法：查找执行	
						find /etc -name inittab -ok ls -l {} \;
						find /etc -name inittab -exec ls -l {} \;
						find /etc/-name init* -a -type f -exec ls -l {} \;
						find . -name a1.txt -exec cat {} \;
					难删除文件的删除操作
						touch shenchao shuaige
						rm "shenchao shuaige"
						ls -i shenchao shuaige
						find . -inum 31531
	帮助
		man ls
		man -k ls
		info ls
		whatis ls
		apropos ls
		date --help
		?/向上下搜索
	压缩解压
		gzip 选项 文件
		.gz
		gunzip 选项 文件
		tar -zcvf fd
			-c create .tar file
			-v view info
			-f 指定压缩后的文件名
			-z 打包压缩
		tar -zxvf fd -C path
			-x 解压.tar
			-v 显示
			-f 指定解压文件
			-z 解压缩
			-C 指定解压路径
		zip 选项 压缩后的文件名称 文件或者目录
			-r 目录
			zip services.zip /etc/services
			zip -r etc.zip /etc/
		unzip 压缩目录
		bzip2 -k f
			压缩后保留源文件
		bunzip2 -k f
			解压缩后保留源文件
	网络通信
		write u
		write webmaster
			ctrl + D 结束
		wall msg filename
			wall Happy New Year！
		ping 选项 IP地址
		ifconfig -a 显示所有网卡的信息
	系统关机
		shutdown -h now
		shutdown -r now
		reboot
	Shell应用
		history
			-c：清空当前历史命令； 
			-a：将历史命令缓冲区中命令写入历史命令文件中； 
			-r：将历史命令文件中的命令读入当前历史命令缓冲区； 
			-w：将当前历史命令缓冲区命令写入历史命令文件中。
			!3 执行
		alias
			alias查看
			alias copy=cp
			alias xrm="rm -r"
			unalias copy
		IO重定向
			0标准输入
			1标准输出
			2标准错误输出
			<
			<<
			>
			>>
			| 管道
			; 以此
			&& 前面成功后面才执行
			|| 前面失败后面不执行
		  
============================================================================================
第4讲 文本编辑器Vim
============================================================================================
	三种模式
		cmd模式
			vim vi 进入命令等待模式
			:wq 退出
			ZZ  保存退出
		insert模式
			esc 退出
		edit模式
			:set nu设置行号
			enter 结束自动进入insert模式
		定位
			h 左
			j 下
			k 上
			l 右
			$ 行尾
			0 行首
			H 屏幕上端
			M 屏幕中央
			L 屏幕下端
			:set nu 设置行号
			:set nonu 取消行号
			gg 第一行
			G 最后一行
			nG 第n行
			:n 第n行
		插入
			先观察光标位置，在不同的位置插入
			a 追加插入
			A 本行行末插入
			i 光标前插入
			I 本行开始插入
			o 光标下插入
			O 光标上插入				
		删除
			x 光标出的字符
			nx 光标后的字符
			dd 删除光标所在的行
			ndd 删除光标所在的n行
			dG 删除光标所在的行以及到末尾的内容
			D 删除光标到行尾
			:n1,n2d 删除指定的行
		复制
			yy Y 复制当前行
			nyy nY 复制当前行以下的n行
			dd 剪切当前行
			ndd 剪切当前行一下的n行
			p P 粘贴当前行上下
		替换和取消
			r 取代字符
			R 从光标处开始替换，按ESC结束
			u 取消上一步操作
		搜索和替换
			:set ic忽略大小写
			:set noic大小写
			/str 搜索字符串 
			按键n N 搜索指定字符串下一个出现的位置next
			:%s/old/new/g 全文替换字符串
			:n1,n2s/old/new/g 指定范围替换字符串			
		转换
			insert<--cmd-->edit
			insert<--cmd  iao
			insert<--cmd  esc
			cmd-->edit :
			cmd-->edit enter自动
			
		vim技巧
			:r filename 把文件追加到当前编辑的文件中
			:! ls /etc/ 在vim中执行命令
			:r !date 追加命令的结果到vim中
			
			:map 快捷键 触发命令
			:map ^P I#<ESC>
			^p是按键是ctrl+v ctrl+p则快捷键是ctrl+p就是注释
			:map ^B 0x ctrl+B取消注释 
			:map ^E I#!/bin/bash
			创建常用的语句
			
			连续注释
			:n1,n2s/^/#/g 行首+#
			:n1,n2s/^#//g 行首#=空
			:n1,n2s/^/\/\//g 加//注释，即:n1,n2s/^/ \/\/ /g
			
			:ab be #!/bin/bash
			:unab be
			
			设置vim
			vim /root/.vimrc
			vim ~/.vimrc
			自己添加快捷键
			set nu
			map ^P I#<ESC>
============================================================================================
第5讲 Linux引导流程解析
============================================================================================
	引导流程
	运行级别
	启动服务
	Grub自举程序的配置和应用
	
	引导流程
		加载固件firmware(CMOS/BIOS)---POST加电自检测
			hwclock --set --date="8/9/2003 16:45:05"
			date
			固件时钟和Linux操作系统的时钟
			hwclock --help
			info hwclock ?/
			man hwclock ?/
		自检测完成后读取磁盘上的Master Boot Record，自举程序BootLoader(Linux常见的是GRUB)---载入内核
			vi /etc/grub.conf 内核的版本标号查看
		载入内核Kernel---驱动硬件
			内核做的第一件事情
			内核里面最多的就是驱动程序
		启动进程init
			Kernel scheduler的PID=0（父进程）
				分配CPU时间
			init进程的PID=1（子进程，但是是所有进程的父进程）
				ps -le | grep init
				孤儿进程(无父)和僵尸进程(无子)的区别
		读取执行配置文件/etc/inittab
			vi /etc/inittab
			grep -V "^#" /etc/inittab 不看以#号开头的行
			man inittab
			inittab文件的结构
				process 指定要运行的脚本
				id 标识符
				run-levels 指定运行级别
				action 指定运行状态
			cd /etc/init.d/ 启动脚本
		
		实践：
			可以修改运行级别
				vi /etc/inittab
			可以写脚本加入无论任何运行级别启动的进程
				/etc/rc3.d
			总结和启动和默认启动脚本的目录
				/etc/init
				/etc/init.d/
				/etc/rc3.d
			启动过程
				fireware
				BootLoader
				Kernel
				init
				/etc/inittab
				initdefault
				/etc/rc.d/rc.d
				/etc/rc.d/rcN.d N=0-6
				username passwd
			启动历史命令
				dmesg | grep eth0
				grep ssh | /var/log/messages 查询目标服务有没有在开机时候留下log
			
	运行级别
		redhat里面的运行级别7种
		0 halt
			关机
		1 single user mode
			相当于windows的安全模式
		2 multiuser without NFS
			NFS网络服务器
		3 full multiuser mode
			2和3模式是服务器最多用的
		4 unuseed
			未启用，可以自定义
		5 X11
			缺省，默认的，桌面，个人用的
		6 reboot
			重启
		查看运行级别
			runlevel
				N 3
				S 3
		切换运行级别
			init 0123456Ss
		
	启动服务
		设置服务自启动
		ln -s
		chkconfig
		ntsysv
		
		写一个脚本在每个运行级别都可以自动执行
			vi /etc/rc.d/init.d/mag.script
			chmod u+x /etc/rc.d/init.d/mag.script
			ls -s /etc/rc.d/init.d/mag.script /etc/rc.d/rc3.d/S100mag.script
		
		把已经自启动的服务转化成非自启动的服务
			在/etc/rc.d/rc3.d/下把大写S改成s
		
		chkconfig的使用
			chkconfig --list
			在某一个运行级别控制
			chkconfig --level 2345 sshd off
			chkconfig --level 2345 sshd on
		
		ntsysv的使用
			ntsysv --level 3
		
	Grub自举程序的配置和应用
		/boot/grub/grub.conf
		ls -l /etc/grub.conf
============================================================================================
第6讲 Linux软件包管理
============================================================================================
	主要内容
		redhat系列
			rpm/yum常用
			二进制
			源代码
			脚本安装
		deb系列
			Ubuntu中apt-get
		rpm/yum区别
			yum自动管理依赖
	
	分类
		rpm体系 redhat/centos/fedora/redflag/opensuse
		deb体系 debian/ubuntu
	
	rpm管理
		rpm -e sudo 卸载软件包
		rpm -ivh sudo-1.7.2.p1-5.e15.i386.rpm 安装软件
		挂载光盘
			mkdir /mnt/cdrom
			mont /dev/cdrom /mnt/cdrom
		在光盘中找到软件包查询并安装
			cd centos
			ls | grep sudo
			rpm -ivh sudo-1.7.2.p1-5.e15.i386.rpm
			rpm -q sudo 查询是不是已经安装
			rpm -qa | grep samba 查询相关的所有相关的软件包
	
	yum管理(自动解决依赖关系)
		更换yum源
			cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
			cd /etc/yum.repos.d/
			wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
			yum makecache
			yum -y update
		
		yum install 安装
		yum check-update 检测升级
		yum update 升级
		yum list 软件包查询
		yum info 软件包信息
		yum remove 卸载软件包
		yum --help 帮助
		man yum 帮助
		
============================================================================================
第7讲 Linux用户管理
============================================================================================
	配置文件
	管理命令
	组管理命令
	批量添加用户
	用户授权
	
	用户信息
		/etc/passwd
		Linux用户UID
			root UID=0
			普通用户 UID=500-60000
			伪用户 UID=1-499
				伪用户和系统和程序服务相关
					bin，daemon，halt，shutdown等Linux系统默认都有伪用户
					mail，news，games，Apache，ftp，mysql，sshd，与Linux相关的进程
				伪用户不需要登录
				可以没有宿主目录
		pwck 锁定文件
		vipw 编辑文件
		id 查看id
		finger 查看用户详细信息
		sudo 
		passwd -S 查看用户密码信息
		who 查看登录信息
		w 查看登录信息
		usermod -L username 禁用
		passwd -l username
		usermod -U username 启用
		passwd -u username
		可以用find查找属于哪个用户的文件
			find -user uid group gid
	密码
		/etc/shadow
			用户名
			密码
			最后一次修改时间
			最小时间间隔
			最大时间间隔
			警告时间
			账号空闲时间
			失效时间
			标志
	组文件
		/etc/group
		组名
		组密码
		GID
		组内用信息列表
		
		groups 查看隶属的用户组
		newgrp 切换用户组
		grpck 检测用户配置文件
		chgrp 修改文件所属组
		vigr 编辑/etc/group文件
	组密码
		/etc/gshadow
	用户配置
		/etc/login.defs
		/etc/default/useadd
	手动添加新用户信息
		/etc/ske1
		增加用户需要手动更改
		/etc/passwd
		/etc/group
		/etc/shadow
	添加用户
		useradd
		-ugGdsce
	添加用户组
		gpasswd
		-adArR
	登录信息
		/etc/motd
		/etc/issue
	
============================================================================================
第8讲 Linux进程管理
============================================================================================
	进程管理
	命令
		查看用户信息w
			JCPU
			PCPU
			WHAT
		ps
			a 所有用户进程
			u 用户名和启动时间
			x 显示没有控制终端的进程
			e 显示所有进程
			l 长格式显示
			w 宽行显示
			
			PID 进程号
			PPID 父进程
			TTY 进程启动终端
			STAT 状态
				S休眠
				D不可中断的休眠状态
				R运行状态
				Z僵死状态
				T停止
			NI 进程优先级
			
				ps -aux | gerp sam
				ps -uU sam
				ps -le | grep init
			
			kill -9 进程号（强关闭）
			kill -l 进程号（重启）
			xkill 关闭图形进程
			killall 关闭所有的进程
			pgrep 服务名称 查看服务进程号
			pkill 进程名称 关闭进程
			
			nice -5 myprogram 指定进程优先级
			renice -5 777 改变进程优先级
		
		ctrl+z 挂起
		ctrl+c 终止
		jobs 查看被挂起的进程
		
		top
			d 时间
			c 显示整行命令名
			u 查看指定用户的进程
			k 终止进程
			h or ? 获取帮助
			r 改变刷新的时间隔间
	计划任务
		at 在某一时间执行
		batch 在负载不多时执行
		cron 安排周期性作业

============================================================================================
第9讲 Linux文件系统管理
============================================================================================
	df 查看分区
	du 查看文件目录的大小
	stat 查看文件详细的时间参数
	md5sum 检验md5的值
	fsck 划分分区
	mkfs 创建文件系统
	e2fsck 检测修复文件系统
	mount 尝试挂载文件
		mount /mnt/hda6 /mnt/test
	/etc/fstab 写入配置文件
	
============================================================================================
第10讲 Shell编程
============================================================================================
	字符处理
		grep 提取行
			grep root /etc/passwd
			grep -n 'fs$' /proc/
		cut 字段提取（局部提取列）
			cut -df file
			-f 指定提取第几列
			-d 指定分隔符
			cut -f 1 -d : /etc/passwd 提取第一列，以:为分隔符
			cat /etc/passwd | grep /bin/bash 找到root用户和普通新建的用户
			cat /etc/passwd | grep /bin/bash | grep -v root 排除root用户得到新建的用户
			cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1 提取普通用户的第一行得到c
			如果分隔符是多个不固定的空格，则cut命令不好用，则要选择awk编程，下面是展现了cut的缺点
			df -h
			df -h | grep "sda1" | cut -f 5 -d " " 这样提取不来硬盘的百分比
		printf 格式化输出
			%ns 以n为一个制表符靠右边输出
			%ni 
			%m.nf
			\n
			\r
			\t
			printf %s 1 2 3 4 5 6
			123456
			printf '%s %s' 1 2 3 4 5 6
			1 23 45 6
			printf '%s %s\n' 1 2 3 4 5 6
			1 2
			3 4
			5 6
			printf '%s\t %s\t %s\t \n' $(filename) 打印表格
		awk 更强大的cut，提取列中的字段，使用很复杂
			awk '条件1{动作1}条件2{动作2}...' filename
			一般使用的表达式的条件是：
				x>10
				x>=10
				x<=10
			一般动作是：
				格式化输出
				流程控制语句
			
			name	age	subject	score
			leebin	10	yuwen	100
			zhang	22	shuxue	97
			wang	24	yingyu	99.7
			awk '{printf $2 "\t" $6 "\n"}' student.txt 
			打印第二列和第四列
			df -h | awk '{printf $5 "\t" $1 "\n"}' 
			打印磁盘使用情况的第5列和第1列
			df -h | grep sda  | awk '{printf $5 "\n"}' | cut -f 1 -d "%" 
			输出sda硬盘的硬盘使用率
			df -h | grep sda1 | awk '{print $5}' | cut -d "%" -f 1 
			输出sda硬盘的硬盘使用率
			注意Linux中的printf结尾不会自定加入\n
			但是Linux的awk中也包括了print会在末尾自动加入\n
			BEGIN 
				awk 'BEGIN {print "this is a table"} \
				{printf $2 "\t" $4 "\n"}' student.txt
				在执行之前打印，加入了条件
				cat /etc/passwd | grep "/bin/bash" | \
				awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
				提取passwd中的root c
				FS是awk的分隔符，如果要手动定义分隔符，最好在前面加入BEGIN，
				避免第一行无法处理的情况
			END
				awk 'BEGIN {print "this is a table"} \
				{printf $2 "\t" $4 "\n"} \
				END {print "---end---"}' student.txt
			关系运算符
				cat student.txt | grep -v name | awk '$2 >= 10 {print $2}'
				对第二列大于10的提取
				grep -v 反选
		sed
			数据的轻量级的流编辑器
			df等命令结果的信息不能直接修改
			sed支持管道符|
			对数据选取替换删除修改
			sed 选项 '动作' filename
			选项
				-n 只经过sed处理的输出
				-e 多条
				-i 修改了源文件
			动作
				a \: 追加
				c \: 替换
				i \: 插入
				d： 删除
				p:  打印
				s: 字符串替换 s/old/new/g
			sed '2p' student.txt 输出第二行并打印整个文件
			sed -n '2p' student.txt 只输出第二行
			df -h | sed -n '2p' 输出第二行
			sed '2,3d' student.txt 假删除第二行第三行
			sed -i '2,3d' student.txt 真删除第二行第三行
			sed '2a hello' a1.txt 追加数据
			sed '2i hello' a1.txt 插入数据
			sed '2c hello' a1.txt 行替换
			sed '3s/97/95/g' student.txt 第3行的97换成95
			sed -i '3s/97/95/g' student.txt 第3行的97换成95，修改源文件
			sed -e 's/leebin/libin/g ; 4s/wang/zhou/g' student.txt
			多个替换同时进行，s前面没有数字代表整个文档
		sort
			sort -fnrtk filename
			-f 忽略大小写
			-n 默认字符串排序，用数值排序
			-r 反向排序
			-t 指定分隔符
			-k n[,m] 按照第几个字段排序
			sort /etc/passwd
			sort -r /etc/passwd 反向排序
			sort -t ":" -k 3,3 /etc/passwd
			sort -n -t ":" -k 3,3 /etc/passwd
			指定分隔符：
			指定第3个字段作为分隔符
			sort -t ":" -k 3,3 /etc/passwd
			不合理的排序，字符串排序
			sort -n -t ":" -k 3,3 /etc/passwd
			合理的排序，数值型
		wc统计命令
			wc -lwm filename
			-l 行数
			-w 单词数
			-m 字符数
	条件判断
		测试一个条件是不是成立[ 逻辑 ]
			文件操作
				-b 块文件
				-c 设备文件
				-d 目录
				-e 文件存在
				-f 普通文件
				-L 符号链接
				-p 管道文件
				-s 文件
				-S 套接字文件
				常见的是def
			权限操作
				-r
				-w
				-x 
				-u SUID
				-g SGID
				-k SBIT
				f1 -nt f2 f1比f2新则真
				f1 -nt f2 f1比f2旧则真
				f1 -ef f2 f1和f2是否有相同的iNode节点
			整数的操作
				1 -eq 2 ==
				1 -ne 2 !=
				1 -gt 2 >
				1 -lt 2 <
				1 -ge 2 >=
				1 -le 2 <=
			字符串操作
				-z str 为空
				-n str 非空为真
				str==str
				str!=str
			多重判断
				判断1 -a 判断2 与
				判断1 -o 判断2 或
				! 非
		两种判断格式
			test -e /root/install.log
			[ -e file ]
			echo $? 测试结果
			0 真实
			非0 不真实
			[ -d /root ] && echo "yes" || echo "no"
			判断真则yes，否则no
			[ -w /root/student.txt ] && echo "yes" || echo "no"
			判断是否有写权限
			touch a.txt
			ln a.txt ./aln.ln
			ln -s a.txt ./asln.ln
			[ a.txt -ef aln.ln ]
			ls -ial
			echo $?
			创建软链接
			创建硬链接
			测试硬链接的是不是有相同的iNode节点
			[ 23 -gt 22 ] && echo "yes" || echo "no" 大于
			[ -z "$name" ] && echo "yes" || echo "no" 为空判断
			aa=abc
			bb=abc
			[ "$aa"=="$bb" ] && echo "yes" || echo "no"
			aa=11
			[ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"
			[ -n "$aa" -o "$aa" -gt 23 ] && echo "yes" || echo "no"
			判断aa变量是不是存在，且或大于23是不是成立
	变量
		a=123
		b=a
		echo $a
		echo $b
		a=`date` 或 a=$(date)
		把命令的结构给变量 $( cmd ) 或 `cmd`
		s=$(($s+$i))
		$s $i 引用变量
		($s+$i) 把运算的结果作为一个整体
		$( cmd )把整体变成变量
		----------------------- 
		#!/bin/bash
		a=1
		b=2
		c=$(( $a+$b ))
		d=$(( $a*$b ))
		echo $c
		echo $d
		e=`date`
		echo $e
	流程控制
		if语句
			if [ 逻辑 ]; then
				程序
			fi
			----------------------- 
			if [ 逻辑 ]
				then
					程序
			fi
			----------------------- 
			if [ 逻辑 ]
				then
					程序
				else
					程序
			fi
			----------------------- 
			if [ 逻辑 ]; then
				程序
			elif [ 逻辑 ]; then
				程序
			else
				程序
			fi
			----------------------- 
			if [ 23 -gt 22 ];then
				echo '23>22'
			fi
			-----------------------
			#!/bin/bash
			#Author: LeeBin
			rate=$(df -h | grep "/dev/sda1" | \
			awk '{print $5}' | cut -d "%" -f 1)
			if [ $rate -ge 0 ]
				then
					echo "warning! /dev/sda1 is full!"
			fi
			分区是不是已经满了的判断程序
			其中
			df -h | grep /dev/sda1 | awk '{print $5}' | cut -d "%" -f 1
			提取硬盘的使用率
			-----------------------
			if [ 23 -gt 22 ]
				then
					echo '23>22'
				else
					echo '23<22'
			fi			
			-----------------------
			if [ -d /tmp/dbbak ]
				then
					echo "Date: $date!" > /tmp/dbbak/dbinfo.txt
					echo "Date size: $size" >> /tmp/dbbak/dbinfo.txt
					cd /tmp/dbbak
					tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &> /dev/null
					rm -rf /tmp/dbbak/dbinfo.txt
				else 
					mkdir /tmp/dbbak
					echo "Date: $date!" > /tmp/dbbak/dbinfo.txt
					echo "Date size: $size" >> /tmp/dbbak/dbinfo.txt
					cd /tmp/dbbak
					tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &> /dev/null
					rm -rf /tmp/dbbak/dbinfo.txt
			fi
			备份mysql数据库
			-----------------------
			上面的脚本不能执行，下面的脚本是可以执行的，因为没有数据库
			if [ -d /tmp/dbbak ]
				then
					echo "Date: $date!" > /tmp/dbbak/dbinfo.txt
					echo "Date size: $size" >> /tmp/dbbak/dbinfo.txt
					cd /tmp/dbbak
					tar -zcf home_$date.tar.gz /home dbinfo.txt &> /dev/null
					rm -rf /tmp/dbbak/dbinfo.txt
				else
					mkdir /tmp/dbbak
					echo "Date: $date!" > /tmp/dbbak/dbinfo.txt
					echo "Date size: $size" >> /tmp/dbbak/dbinfo.txt
					cd /tmp/dbbak
					tar -zcf home_$date.tar.gz /home dbinfo.txt &> /dev/null
					rm -rf /tmp/dbbak/dbinfo.txt 
			fi
			:wq
			chmod 775 homebk.txt 
			./homebk.txt 
			cd /tmp/
			cd dbbak/
			tar -ztvf home_171116.tar.gz 查看压缩文件不解压
			这个脚本是备份自己的目录/home
			-----------------------
			判断Apache是不是启动，这是一个非常重要的程序
			安装查看
			yum -y install httpd
			service httpd start
			ps aux | grep httpd
			netstat -tlum | grep 80（放弃这个查看方式，写脚本复杂）
			yum -y install nmap
			nmap -sT 192.168.231.135（采用这个查看方式）
			nmap -sT 192.168.231.135 | grep tcp | grep http | awk '{print $2}'
			创建文件
			touch apacheIsStart.sh
			chmod 755 apacheIsStart.sh
			vim apacheIsStart.sh
			脚本
			date +%Y%m%d%H%M%S
			年月日时分秒
			#!/bin/bash
			port=$(nmap -sT 192.168.231.135 | grep tcp | grep http | awk '{print $2}')
			if [ "$port"=="open" ]
				then
					echo "$(date) httpd is OK!" >> /tmp/autostart-acc.log
				else
					/etc/rc.d/init.d/httpd start &> /dev/null
					echo "$(date) restart httpd!!" >> /tmp/autostart-err.log
			fi
			上面这个脚本工作中经常用到
			-----------------------
			vim中显示行号:set nu
			#!/bin/bash
			read -p "Please input a filename: " file
			if [ -z "$file" ];then
				echo "Error, please input a filename"
				exit 1
			elif [ ! -e "$file" ];then
				echo "Your input is not a file!"
				exit 2
			elif [ -f "$file" ];then
				echo "$file is a regulare file!"
			elif [ -d "$file" ];then
				echo "$file is a directory!"
			else
				echo "$file is an other file!"
			fi
			判断输入的字符串的类型
			-----------------------
		case语句
			case $var in
				"val")
					cmd
				;;
				"val")
					cmd
				;;
				*)
					cmd
				;;
			esac
			-----------------------
			#!/bin/bash
			read -p "Please choose yes/no: " -t 30 cho
			case $cho in
				"yes")
					echo "Your choose is yes!" ;;
				"no")
					echo "Your choose is no!" ;;
				*)
					echo "Your choose is error!"
			esac
			-----------------------
		for循环
			for var in val1 val2 val3...
				do
					cmd
				done
			-----------------------
			for (( init;loop;val ))
				do
					cmd
				done
			-----------------------
			#!/bin/bash
			for x in 1 2 3 4 5
				do
					echo "$x"
				done
			-----------------------
			#!/bin/bash
			cd /lamp
			ls *.tar.gz > ls.log
			for i in $(cat ls.log)
				do
					tar -zxf $i &> /dev/null
				done
			rm -rf /lamp/ls.log
			批量解压缩脚本
			-----------------------
			#!/bin/bash
			s=0
			for(( i=1;i<=100;i=i+1 ))
				do
					s=$(( $s+$i ))
				done
			echo "the sum of 1 to 100 is: $s"
			-----------------------
			#!/bin/bash
			read -p "name: " -t 30 name
			read -p "num: " -t 30 num
			read -p "pass: " -t 30 pass
			if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ];then
				y=$(echo $num | sed 's/[0-9]//g')
				if [ -z "$y" ];then
					for(( i=1;i<=$num;i=i+1 ))
						do
							/usr/sbin/useradd $name$i &> /dev/null
							echo $pass | /usr/bin/passwd --stdin $name$i &> /dev/null
						done
				fi
			fi
			批量添加指定的用户
			cat /etc/passwd
			查看是不是成功添加
			-----------------------
		while循环
			while [ test ]
			do
				cmd
			done
			-----------------------
			x=10
			while [ $x -gt 0 ]
			do
				echo $x
				x=$[ $x-1 ]
			done
			-----------------------
			x=10
			while echo $x
				[ $x -ge 1 ]
			do
				echo "this is inside the loop"
				x=$[ $x-1 ]
			done
			-----------------------
			i=1
			s=0
			while [ $i -le 100 ]
			do
					s=$(( $s+$i ))
					i=$(( $i+1 ))
			done
			echo "the sum is $s"
			-----------------------
		until循环
			只要条件不成立，则继续
			until [ test ]
			do
				cmd
			done
			-----------------------
			#!/bin/bash
			i=1
			s=0
			until [ $i -gt 100 ]
			do
				s=$(( $s+$i ))
				i=$(( $i+1 ))
			done
			echo "the sum is $s"
			
	Linux中的通配符(命令自带，用来匹配文件名，完全匹配)
		* 出现0或多次
		？ 
		[]
	Linux中的正则表达式(工具支持，在文件搜索指定的字符串，包含匹配)
		基础正则表达式参考下面
			参考百度百科正则表达式
		* 前面一个或者多个
		. 一个字符
		^ 开头
		$ 结尾
		[abc] 指定的字符
		[^abc] 除了
		\ 转义符
		[0-9]\{n\} 前面的字符出现了n次
		\{n,\} 前面的字符不小于n次
		\{n,m\} 前面的字符出现了n到m次
		
		grep "a*" file 匹配了全部的文件(和普通的不一样)
		grep "aa*" file 
		grep "aaa*" file
		grep "aaaa*" file
		grep "a..d" file匹配单个字符
		grep ".*" file 匹配任意字符
		grep "^M" file 开头
		grep "^M*n$" file 开头和结尾
		gerp "^[^a-zA-Z]" 非字母开头
		gerp "\.$" 非字母开头 以点结尾
		gerp "sa\{1,2\}id" 匹配a出现了1到2次数
	
============================================================================================
第11讲 Linux网络设置
============================================================================================
	rpm Linux网络相关的操作
		永久更改在非dhcp模式下更改IP
			/etc/sysconfig/network-scripts/ifcfg-eth0
			DEVICE=eth0 
			ONBOOT=yes 
			BOOTPROTO=static 
			IPADDR=192.168.0.2  
			NETMASK=255.255.255.0  
			GATEWAY=192.168.0.1 
			设置完成后service network restart生效
				USERCTL=no 即不允许普通用户修改网卡
				PEERDNS=yes 它表示允许从DHCP获得的DNS覆盖本地的
				DNS	GATEWAY 选项可以设置网关参数
				ONBOOT 它表示网卡是否随系统启动而启动，此项一定要设置成on
			一般更改：
				IPADDR
				GATWAY
				NETMASK
					BROADCAST
		暂时更改服务器更改主机的IP地址
			ifconfig eth33 192.168.x.x 暂时更改
		更改主机名
			hostname name 临时
			/etc/sysconfig/network/hostname 默认的是localhost，重启，永久
		网络启动脚本生效更改
			/etc/rc.d/init.d/network start/stop/restart
			service network restart
		查看和网络相关的文件 man services
		查看对用的端口和协议 cat services
		指定DNS服务和地址 /etc/resolv.conf
			nameserver 192.168.231.2 192.168.231.2
			可以用空格指定多个DNS
		安装nmap，扫描端口：
			nmap 192.168.14.127
			mount /dev/cdrom /mnt/cdrom
			rpm -ivh /mnt/cdrom/CentOs/nmap-4.11-1.1.i386.rpm
			nmap 192.168.14.127
			这样就可以扫描到的已经开启的端口（这种扫描软件只能扫描常用的端口）
			可以更改ssh的端口，这样开启了服务就不会被发现了
		常见的网络命令
			ifconfig 信息，关闭或者开启网卡
			ethtool eth33 检测网络连接
			arp 查看ARP信息
			route 查兰路由表
			traceroute 查看路由路径
			netstat 监控网络状态
			ping -c 3 -s 1000 192.168.14.18 指定次数 包的大小
			zerba 路由软件，把Linux作为中间路由器
			netstat -an 查看所有的连接
			
============================================================================================
第12讲 Linux文件共享服务
============================================================================================


============================================================================================
第13讲 LAMP环境编译
============================================================================================






